% file: about.tex

\chapter{这本书是关于什么的？}
\label{ch:About}

神经网络是有史以来发明的最优美的编程范式之一。在传统的编程方法中，我们告诉计算机
做什么，把大问题分成许多小的、精确定义的任务，计算机可以很容易地执行。相比之下，
在神经网络中，我们不告诉计算机如何解决我们的问题。相反，它从观测数据中学习，找出
它自己的解决问题的方法。

从数据中自动学习，听上去很有前途。然而，直到2006年，除了用于一些特殊的问题，我们
仍然不知道如何训练神经网络去超越传统的方法。2006年，被称为``深度神经网络''的学习
技术的发现引起了变革。这些技术现在被称为``深度学习''。它们已被进一步发展，今天深
度神经网络和深度学习在计算机视觉、语音识别、自然语言处理等许多重要问题上都取得了
显著的性能。他们正被谷歌、微软、Facebook等公司大规模部署。

这本书的目的是帮助你掌握神经网络的核心概念，包括现代技术的深度学习。在完成这本书
的学习之后，你将使用神经网络和深度学习来解决复杂模式识别问题。你将为使用神经网络
和深度学习打下基础，来攻坚你自己设计中碰到的问题。

\section*{一个以原理为导向的方法}
\label{sec:PrincipleOrientedApproach}

本书一个坚定的信念，是让读者更好地去深刻理解神经网络和深度学习，而不是像一张冗长
的洗衣单一样模糊地列出一堆想法。如果你很好理解了核心理念，你就可以很快地理解其他
新的推论。用编程语言对比，把这理解为掌握一种新语言的核心语法、库和数据结构。你可
能仍然只是``知道''整个编程语言的一小部分---许多编程语言有巨大的标准库---但新的库
和数据结构可以很快且容易被理解。

这就意味着这本书的重点不是作为一个如何使用一些特定神经网络库的教程。如果你主要想
围绕着某个程序库的方式去学习，那不要读这本书！找到你想学习的程序库，并通过教程和
文档来完成。注意这点。虽然这也许能很快解决你的问题，但是，如果你想理解神经网络中
究竟发生了什么，如果你想要了解今后几年都不会过时的原理，那么只是学习些热门的程序
库是不够的。你需要领悟让神经网络工作的原理。技术来来去去，但原理是永恒的。

\section*{一个动手实践的方法}
\label{sec:HandsOnApproach}

我们将通过攻克一个具体的问题：教会计算机识别手写数字的问题，来学习神经网络和深度
学习的核心理论。这个问题用常规的方法来编程解决是非常困难的。然而，正如我们所看到
的，它可以很好地利用一个简单的神经网络来解决，只需几十行代码，没有特别的库。更多
的是，我们会通过多次迭代来改进程序，逐步融入神经网络和深度学习的核心思想。

这一动手的方法意味着你需要一些编程经验来阅读这本书。但你不必是一个专业的程序员。
我用Python（2.7版）写了代码，即使你不是用Python编程，努力一下也应该很容易理解。通
过这本书，我们将开发一个小的神经网络库，它可以用来实验和建立理解。所有的代码都可
以在\href{https://github.com/mnielsen/neural-networks-and-deep-learning}{这里}下
载。一旦你完成了这本书，或者你读它，你可以轻松地学会一个功能更加完善的神经网络库
用于生产。

类似地，对读者数学知识的需求是适度的。在大多数章节中都有一些数学，但它通常只是初
等代数和函数图，我期望大多数读者都能看懂。我偶尔会使用更高级的数学，但已经组织了
材料，这样即使你理解不了有些数学细节，你还是可以跟上。使用数学较多的
是\hyperref[ch:HowTheBackpropagationAlgorithmWorks]{第二章}，其中需要一些多元微
积分和线性代数。如果你不熟悉它们，我
在\hyperref[ch:HowTheBackpropagationAlgorithmWorks]{第二章}开始讨论了如何通览本书
用到的数学。如果你发现它真的很难，你可以直接跳到那一章的主要结果
的%
\href{http://neuralnetworksanddeeplearning.com/chap2.html#the_backpropagation_algorithm}{
  总结}。无论如何，不要一开始就担心这点。

难得有一本书能兼顾理论和动手实践。但是我相信，如果我们建立了神经网络的基本思路，
你会学到最好的。我们将开发实际能用的代码，而不仅仅是抽象的理论，这些代码你可以探
索和扩展。这样你就可以理解其基础，不论是理论还是实践，并且扩展和提高你的知识面。
